/*
 * =====================================================================================
 *
 *       Filename:  core_match.c
 *
 *    Description:  
 *
 *        Version:  1.0
 *        Created:  2025年08月19日 17时29分42秒
 *       Revision:  none
 *       Compiler:  gcc
 *
 *         Author:  YOUR NAME (), 
 *   Organization:  
 *
 * =====================================================================================
 */
#include <stdlib.h>
#include <stdio.h>
#include <stdbool.h>
#include <limits.h>
#include "core_match.h"

#define NUM_CORES 12
#define NUM_SLICES 24

// 时延数据表（行：核心编号，列：切片编号）
int latency_table[NUM_CORES][NUM_SLICES] = {
    // 核心0的时延数据（切片0-23）
    {85,	76,	80,	89,	87,	80,	89,	98,	92,	90,	92,	98,	104,	98,	98,	99,	104,	110,	108,	107,	108,	116,	110,	111},
    // 核心1的时延数据（切片0-23）
    {109,105,99,103,103,97,92,99,91,91,86,85,92,89,84,80,79,100,97,94,87,102,97,94},
    // 核心2的时延数据（切片0-23）
    {115,	109,	108,	110,	110,	107,	107,	103,	99,	100,	96,	98,	99,	96,	89,	88,	88,	88,	85,	82,	81,	92,	88,	82}, 
    // 核心3的时延数据（切片0-23）
    {93,	87,	82,	92,	88,	84,	79,	100,	98,	96,	92,	89,	103,	103,	99,	95,	94,	116,	110,	110,	105,	116,	110,	107},
    // 核心4的时延数据（切片0-23）
    {102,	95,	91,	98,	94,	94,	94,	90,	86,	83,	79,	84,	92,	92,	90,	83,	88,	104,	100,	100,	96,	104,	102,	98},
    // 核心5的时延数据（切片0-23）
    {115,	106,	111,	110,	107,	104,	109,	104,	98,	96,	98,	103,	97,	93,	92,	92,	97,	89,	87,	82,	86,	86,	80,	81},
    // 核心6的时延数据（切片0-23）
    {88,	87,	87,	82,	80,	82,	88,	91,	86,	90,	95,	98,	98,	95,	97,	97,	104,	107,	102,	107,	110,	110,	110,	110},
    // 核心7的时延数据（切片0-23)
    {96,	91,	94,	95,	89,	89,	93,	86,	80,	78,	81,	86,	92,	86,	85,	87,	90,	98,	97,	96,	95,	104,	98,	98},
    // 核心8的时延数据（切片0-23）
    {100,	100,	104,	97,	95,	97,	104,	89,	84,	89,	93,	91,	82,	78,	82,	85,	88,	93,	90,	95,	95,	93,	95,	97},
    // 核心9的时延数据（切片0-23）
    {105,	109,	116,	102,	104,	109,	115,	91,	96,	97,	103,	103,	89,	92,	94,	97,	100,	79,	82,	85,	88,	82,	88,	90},
    // 核心10的时延数据（切片0-23）
    {108,	116,	116,	103,	107,	110,	115,	98,	99,	103,	103,	110,	91,	93,	97,	100,	103,	83,	87,	88,	91,	80,	85,	88},
    // 核心11的时延数据（切片0-23）
    {89,	96,	98,	87,	88,	93,	98,	79,	80,	84,	88,	90,	85,	86,	91,	91,	97,	91,	95,	97,	102,	98,	102,	102},
};

// 核心匹配函数
int match_core(int slice1, int slice2, bool find_min) {
    int best_core = -1;
    int best_sum = find_min ? INT_MAX : INT_MIN;

    for (int core = 1; core < NUM_CORES; core++) {
        // 获取当前核心访问两个切片的时延
        int latency1 = latency_table[core][slice1];
        int latency2 = latency_table[core][slice2];
        int sum = latency1 + latency2;

        // 根据bool参数选择最小或最大的时延和
        if (find_min) {
            if (sum < best_sum) {
                best_sum = sum;
                best_core = core;
            }
        } else {
            if (sum > best_sum) {
                best_sum = sum;
                best_core = core;
            }
        }
    }
    if (find_min) {
        printf("Min_core: %d, min_latency: %d\n", best_core, best_sum);
    } else {
        printf("Max_core: %d, max_latency: %d\n", best_core, best_sum);
    }

    return best_core;
}


